package com.ccp.dev.system.service;

import com.ccp.dev.core.basic.util.UUIDUtils;
import com.ccp.dev.core.basic.web.query.QueryFilter;
import com.ccp.dev.core.util.BeanUtils;
import com.ccp.dev.core.util.Convert;
import com.ccp.dev.core.util.StringUtil;
import com.ccp.dev.system.dao.IndexColumnDao;
import com.ccp.dev.system.model.IndexColumn;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 首页栏目 服务层实现
 *
 * @author doufangzheng
 * @date 2019-03-19
 */
@Service
public class IndexColumnService {
    @Resource
    private IndexColumnDao indexColumnDao;

    /**
     * 查询首页栏目信息
     *
     * @param id 首页栏目ID
     * @return 首页栏目信息
     */
    public IndexColumn getIndexColumnById(String id) {
        return indexColumnDao.getIndexColumnById(id);
    }

    /**
     * 查询首页栏目列表
     *
     * @param queryFilter 查询条件
     * @return 首页栏目集合
     */
    public List<IndexColumn> queryIndexColumnList(QueryFilter queryFilter) {
        return indexColumnDao.queryList(queryFilter);
    }

    /**
     * 保存首页栏目
     *
     * @param indexColumn 首页栏目信息
     * @return 结果
     */
    @Transactional(rollbackFor = Exception.class)
    public int saveIndexColumn(IndexColumn indexColumn) throws Exception {
        if(StringUtil.isNotEmpty(indexColumn.getId())){
           return updateIndexColumn(indexColumn);
        }
        validateIndexColumnWhenAdd(indexColumn);
        indexColumn.setId(UUIDUtils.getUUIDFor32());
        return indexColumnDao.insertIndexColumn(indexColumn);
    }

    /**
     * 校验名称,别名
     *
     * @param indexColumn indexColumn
     */
    //todo 此方法是否有意义？
    private void validateIndexColumnWhenAdd(IndexColumn indexColumn){
        //名称
        IndexColumn i = new IndexColumn();
        //TODO 两次赋值，第二次清空了
        i.setName(indexColumn.getName());
/*        if (BeanUtils.isNotEmpty(queryIndexColumnList(i))) {
//            throw new InsertObjectException("栏目名已存在");
        }*/
        //别名
        i.setName("");
        i.setAlias(indexColumn.getAlias());
/*        if (BeanUtils.isNotEmpty(queryIndexColumnList(i))) {
//            throw new InsertObjectException("栏目别名已存在");
        }*/
    }

    /**
     * 修改首页栏目
     *
     * @param indexColumn 首页栏目信息
     * @return 结果
     */
    @Transactional(rollbackFor = Exception.class)
    //todo 多余的异常抛出
    public int updateIndexColumn(IndexColumn indexColumn) throws Exception {
//        validateOrgWhenUpdate(indexColumn);
        return indexColumnDao.updateIndexColumn(indexColumn);
    }

    /**
     * 校验名称,别名
     *
     * @param indexColumn 首页栏目信息
     */
    //TODO 没有内容，直接删除方法
    private void validateOrgWhenUpdate(IndexColumn indexColumn) {/*
        //校验名称
        IndexColumn i = new IndexColumn();
        if (StringUtil.isNotEmpty(indexColumn.getName())) {
            //是不是自己原来的名称
            int num = 0;
            i.setName(indexColumn.getName());
            i.setId(indexColumn.getId());
            if (BeanUtils.isNotEmpty(queryIndexColumnList(i))) {
                num++;
            }
            i.setId("");
            List<IndexColumn> indexColumns = queryIndexColumnList(i);
            if (BeanUtils.isNotEmpty(indexColumns)) {
                int size = indexColumns.size();
                if (size > num) {
//                    throw new UpdateObjectException("栏目名已存在");
                }
            }
            i.setName("");
        }
        //校验别名
        if (BeanUtils.isNotEmpty(indexColumn.getAlias())) {
            //是不是自己原来的别名
            int num = 0;
            i.setAlias(indexColumn.getAlias());
            i.setId(indexColumn.getId());
            if (BeanUtils.isNotEmpty(queryIndexColumnList(i))) {
                num++;
            }
            i.setId("");
            List<IndexColumn> indexColumns = queryIndexColumnList(i);
            if (BeanUtils.isNotEmpty(indexColumns)) {
                int size = indexColumns.size();
                if (size > num) {
//                    throw new UpdateObjectException("栏目别名已存在");
                }
            }
        }*/
    }

    /**
     * 删除首页栏目对象
     *
     * @param ids 需要删除的数据ID
     * @return 结果
     */
    @Transactional(rollbackFor = Exception.class)
    public int deleteIndexColumnByIds(String ids) {
        return indexColumnDao.deleteIndexColumnByIds(Convert.toStrArray(ids));
    }

    /**
     * 根据别名判断是否存在
     * @param alias
     * @return 存在返回true,否则返回false
     */
    public Boolean getIndexColumnByAliasAndId(String alias,String id){
        Map<String,String> map = new HashMap<>();
        map.put("alias",alias);
        if(StringUtil.isNotEmpty(id)){
            map.put("id",id);
        }
        int indexColumn = indexColumnDao.getIndexColumnByAliasAndId(map);
        return indexColumn > 0;
    }

    /**
     * 根据栏目id查询栏目名称
     * @param ids 主键数组
     * @return nameList
     */
    public List<String> queryIndexColumnNameByIds(String[] ids){
        if(BeanUtils.isEmpty(ids)){
            return null;
        }
        return indexColumnDao.queryIndexColumnNameByIds(Arrays.asList(ids));
    }

}
